/*
	$.kefu_manager({
		should_login:true,//决定是否使用默认用户
					
	});

 * */
jQuery.kefu_conf ={
	state:'stop',	
};
jQuery.kefu_manager = function(conf) {
	var choice_div_id = "kf_manager_user_choice";
	var create_system_div_id = "create_system_div";
	var choice_system_div_id="choice_system_div";
	var usersCacheFromLocalCookies="usersCacheFromLocalCookies";
	var now_system={};
	var ws;
	var ws_url="";
	var user_img="./lib/imgs/def_user_img.png";
	var system_img="./lib/imgs/luntan_logo.png";
	var static_path="http://127.0.0.1:8080/Jstx/";
	if(conf.ws_url==undefined){
		alert("conf.ws_url is undefined.");
		return false;
	}else{
		ws_url=conf.ws_url;
	}
	if(conf.user_img!=undefined){
		user_img=conf.user_img;
	}
	if(conf.system_img!=undefined){
		system_img=conf.system_img;
	}
	if(conf.static_path!=undefined){
		static_path=conf.static_path;
	}
	var kf_div_info = {
			choice_user : [ "<div style='text-align:center;padding-top:20px;'>",
				"<a class='layui-btn layui-btn-primary btn-kf-m-start-o'  href='javascript:void(0)'>",
				"<i class='layui-icon'>&#xe60a;</i>",
				"使用已有账户",
				"</a>",
				"<a class='layui-btn layui-btn-primary btn-kf-m-start-n'  href='javascript:void(0)'>",
				"<i class='layui-icon'>&#xe606;</i>",
				"创建新账户",
				"</a>",
				"</div>"
			],
			add_user : "<div class='layui-form' style='width:100%;text-align:center;padding-top:20px;'>" +
				"<div class='layui-form-item'>" +
				"<label class='layui-form-label'>登录口令</label>" +
				"<div class='layui-input-block'>" +
				"<input type='text' value='' name='' lay-verify='required' class='login-key layui-input' >" +
				"</div>" +
				"</div>" +
				"<div class='layui-form-item'>" +
				"<label class='layui-form-label'>客服昵称</label>" +
				"<div class='layui-input-block'>" +
				"<input type='text' value='' name='' lay-verify='required' class='user-name layui-input' >" +
				"</div>" +
				"</div>" +
				"<div class='layui-form-item'>" +
				"<label class='layui-form-label'>签名</label>" +
				"<div class='layui-input-block'>" +
				"<input type='text' value='' name='' lay-verify='required' class='user-sign layui-input' >" +
				"</div>" +
				"</div>" +
				"<div class='layui-form-item'>" +
				"<label class='layui-form-label'>问候语</label>" +
				"<div class='layui-input-block'>" +
				"<input type='text' value='' name='' lay-verify='required' class='user-greetings layui-input' >" +
				"</div>" +
				"</div>" +
				"</div>",
				choice_check_user:[
				             "<div class='layui-form ' style='width:100%;text-align:center;padding-top:20px;'>",
				             
				             "</div>"
				             ]
		};
	var guid=function() {
		  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
		    var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
		    return v.toString(16);
		  });
	}
	var readCacheUsersInCookies=function(){
		if($.cookie!=undefined){
			if($.cookie(usersCacheFromLocalCookies)!=undefined||$.cookie(usersCacheFromLocalCookies)!=null){
				return JSON.parse($.cookie(usersCacheFromLocalCookies));
			}else{
				return undefined;
			}
		}else{
				return undefined;
		}
	};
	var updateUsersCacheToCookies=function(user){
		if($.cookie!=undefined){
			$.cookie(usersCacheFromLocalCookies,JSON.stringify(user));
			return true;
		}else{
			return false;
		}
	}
	var bindKeFuEvent=function(ws,layim,layer,system_mine){
		var checkWs=function(ws){
			if(ws==undefined)return -1;
			else return ws.readyState;
		}
		//需要实现客服状态:客服上线,客服下线,客服隐身(手动离线)
		var kf_online=function(ws){
			//处理客服上线
			ws.send(JSON.stringify({
				method: 'system_online' //随便定义，用于在服务端区分消息类型
			    ,params:{
			    	form:system_mine
			    }
			}));
		};
		var kf_offline=function(ws){
			//处理客服下线
			ws.send(JSON.stringify({
				method: 'system_offline' //随便定义，用于在服务端区分消息类型
			}));
		};
		var kf_create_group=function(){
		}
		var kf_send_info=function(to,info){
			console.log(info);
			//处理发送的消息
			ws.send(JSON.stringify({
				method: 'send_info', //随便定义，用于在服务端区分消息类型
				params:{
			    	form:system_mine,
			    	to:to,
			    	content:info
			    }
			}));
		};
		var kh_online=function(){
			//处理客户上线(接入会话)
		}
		var kh_offline=function(){
			//处理客户下线
		}
		var kh_cmd_getMessage=function(){
			//处理接收到的客户消息

		};
		layim.on('ready', function(options){
			//打开socket
			ws=new WebSocket(ws_url);

			
			//web socket 事件
			ws.onopen=function(e){
				kf_online(ws);//客服上线
				if(conf.gb!=undefined){
					$(conf.gb).click(function(){
						layer.open({
							title:"广播消息",
							area:"300px",
							content:"<input type='text' value='' placeholder='请输入广播内容' class='gb-info layui-input' style='margin:0px auto;'/>",
							btn:['推送','取消'],
							btn1:function(index,layero){
								var info=$(".gb-info",layero).val();
								ws.send(JSON.stringify({
									method: 'gb_info', //随便定义，用于在服务端区分消息类型
									content:info
								}));
							},
							btn2:function(index,layero){
								layer.close(index);
							}
						});
					});
				}else{
					layer.msg("启动程序后,才能");
				}
			};
			ws.onmessage=function(message){
				var result=JSON.parse(message.data);
				switch (result.method) {
				case "kefu_shangxian":
					layer.msg("已上线.");
					break;
				case "kefu_xiaxian":
					layer.msg("已下线.");
					break;
				case "update_user_info":
					console.log("更新信息已提交至服务器.");
					break;
				case "join_chat":
					//加入好友列表
					layim.addList({
						type: 'friend',
						groupid:1996,
						id:result.form.id,
						avatar:result.form.avatar,
						username:result.form.username+"-"+result.form.id,
						sign:'加入于 '+new Date
					});
					//弹出提示
				    layim.getMessage({
				        username: result.form.username //消息来源用户名
				        ,avatar: result.form.avatar //消息来源用户头像
				        ,id: result.form.id //消息的来源ID（如果是私聊，则是用户id，如果是群聊，则是群组id）
				        ,type: "friend" //聊天窗口来源类型，从发送消息传递的to里面获取
				        ,content: "【系统提示】访客有问题要咨询。" //消息内容
				        ,mine: false //是否我发送的消息，如果为true，则会显示在右方
				        ,fromid: -1 //消息的发送者id（比如群组中的某个消息发送者），可用于自动解决浏览器多窗口时的一些问题
				        ,timestamp: new Date() //服务端时间戳毫秒数。注意：如果你返回的是标准的 unix 时间戳，记得要 *1000
				      });
					//发送问候语
				    kf_send_info(result.form,system_mine.greetings);
					break;
				case "get_message":
					//输出信息
					layim.getMessage({
				        username: result.form.username //消息来源用户名
				        ,avatar: result.form.avatar //消息来源用户头像
				        ,id: result.form.id //消息的来源ID（如果是私聊，则是用户id，如果是群聊，则是群组id）
				        ,type: "friend" //聊天窗口来源类型，从发送消息传递的to里面获取
				        ,content: result.content//消息内容
				        ,mine: false //是否我发送的消息，如果为true，则会显示在右方
				        ,fromid: result.form.id //消息的发送者id（比如群组中的某个消息发送者），可用于自动解决浏览器多窗口时的一些问题
				        ,timestamp: new Date() //服务端时间戳毫秒数。注意：如果你返回的是标准的 unix 时间戳，记得要 *1000
				    });
					break;
				case "kh_xiaxian":
					layim.removeList({
						  type: 'friend' //或者group
						  ,id: result.form.id //好友或者群组ID
					});
					layer.msg(result.form.username+"-"+result.form.id +" 下线了。");
					break;
				default:
					break;
				}
			};
			ws.onerror=function(e){
				layer.msg("与服务器建立连接失败。");
				console.log(e);
			};
			ws.onclose=function(e){
				
			};
		});
		layim.on('online', function(status){
			  if(ws==undefined){layer.msg("与服务器通信失败。");return;}
			  console.log(status); //获得online或者hide
			  switch (status) {
			case "online":	/*-*/
				kf_online(ws);//客服上线
				break;
			case "hide":	/*-*/
				kf_offline(ws);//客服下线
				break;
			default:
				break;
}
			  //此时，你就可以通过Ajax将这个状态值记录到数据库中了。
			  //服务端接口需自写。
		});
		layim.on('sign', function(value){
			  if(system_mine!=undefined){
				  system_mine.sign=value;
				  ws.send(JSON.stringify({
						method: 'update_user_info' //随便定义，用于在服务端区分消息类型
					    ,params:{
					    	form:system_mine
					    }
				  }));
				  console.log("签名已更新,新签名:"+value);
			  }else{
				  layer.msg("更新签名出现点意外,请刷新页面后重试。");
			  }
		});
		layim.on('sendMessage', function(res){
			  var mine = res.mine; //包含我发送的消息及我的信息
			  var to = res.to; //对方的信息
			  kf_send_info(to,mine.content);
		});
		//窗口切换事件,可用作提示用户正在输入
		layim.on('chatChange', function(res){
		  var type = res.data.type;
		  if(type === 'friend'){
		    layim.setChatStatus('<span style="color:#FF5722;">在线</span>'); //模拟标注好友在线状态
		  } else if(type === 'group'){
		    //模拟系统消息
		    layim.getMessage({
		      system: true //系统消息
		      ,id: 111111111
		      ,type: "group"
		      ,content: '贤心加入群聊'
		    });
		  }
		});
	};
	var bindLayimTools=function(layim){
		//创建工具
		layim.on('tool(a)', function(insert, send, obj){ //事件中的tool为固定字符，而code则为过滤器，对应的是工具别名（alias）
			  layer.prompt({
			    title: '插入链接'
			    ,formType: 2
			    ,shade: 0
			  }, function(text, index){
			    layer.close(index);
			    insert('a('+text+')[链接:'+text+']'); //将内容插入到编辑器，由insert完成
			    send(); //自动发送
			  });
		});
		
		
	};
	layui.use([ 'layim', 'layer' ,'form'], function(layim, layer,form) {
		var form =layui.form;
		var open_layim=function(){
			//初始化layim.system_mine
			var system_mine={
			        "username": now_system.name //我的昵称
			        ,"id": now_system.id //我的ID
			        ,"status": "online" //在线状态 online：在线、hide：隐身, 默认在线,如果用户退出,再发送下线命令
			        ,"avatar": system_img//用户头像头像
			        ,"sign":now_system.sign//用户签名
			        ,"type":"system"
			        ,"greetings":now_system.greetings
			};
			//绑定事件
			bindKeFuEvent(ws,layim,layer,system_mine);
			//绑定工具
			bindLayimTools(layim);
			//配置layim
			layim.config({
			    //配置客户信息
			    init: {     
			      //配置客户信息
			      mine:system_mine,
			      friend:[{
			          	  "groupname": "在线客户"
			              ,"id": 1996
			              ,"list": []
			      }]
			    }
			    //上传图片接口
			    ,uploadImage: {
			      url: static_path+'upload/img.c' //（返回的数据格式见下文）
			      ,type: 'post' //默认post
			    }
			    //上传文件接口
			    ,uploadFile: {
			      url: static_path+'/upload/file.c' //（返回的数据格式见下文）
			      ,type: 'post' //默认post
			    }
			    //扩展工具栏
			    ,tool: [
			    	{
				    	alias: 'a' //工具别名
					    ,title: '链接' //工具名称
					    ,icon: '&#xe64d;' //工具图标，参考图标文档
				  	}
			    ]
			    ,brief: false //是否简约模式(客服模式)
			    ,notice: true //是否开启桌面消息提醒，默认false
			    ,isgroup:false
			    ,copyright:true
			   //,chatLog: lt_logs
			  });
		};
		var choice_div_index = layer.open({
			id : choice_div_id,
			title : "启动客户服务",
			area : [ 440, 180 ],
			content : kf_div_info.choice_user.join(" "),
			btn : []
		});
		
		//function
		$(".btn-kf-m-start-o", $("#" + choice_div_id)).click(function() {
			//从cookies中读取用户信息列表
			var user=readCacheUsersInCookies();
			if(user==undefined||user==null){
				layer.msg("抱歉,系统缓存内无账户");
			}else{
				layer.close(choice_div_index); //关闭功能选择窗口
				now_system=user;
				open_layim();//启动客服程序
			}
		});
		$(".btn-kf-m-start-n", $("#" + choice_div_id)).click(function() {
			layer.close(choice_div_index);
			//打开创建新客服窗口
			var create_system_div_index = layer.open({
				id : create_system_div_id,
				title : "<i class='layui-icon'>&#xe658;</i>创建新客服",
				area : [ "600px" ],
				content : kf_div_info.add_user,
				btn : [ '启动', '返回', '取消' ],
				btn1:function(index,layero){
					//获取输入值
					var b=false;
					$(".user-greetings,.user-name,.login-key").each(function(){
						if($(this).val()==""){
							layer.tips("请输入",$(this),{
								 tips: [2, '#FF5722'],
							});
							b=true;
							return false;
						}
					});
					if(b)return false;
					var key=$(".login-key",layero).val();
					var name=$(".user-name",layero).val();
					var greetings=$(".user-greetings",layero).val();
					var sign=$(".user-sign",layero).val();
					var user={};
					//更新当前用户对象
					now_system={
							id:guid(),
							key:key,
							name:name,
							greetings:greetings,
							sign:sign
					};
					user=now_system;
					updateUsersCacheToCookies(user);//update cookies
					layer.close(index);//exit user create layer
					open_layim();//启动客服程序
				},
				btn2:function(index,layero){
					layer.close(index);
					$.kefu_manager(conf);
				},
				btn3:function(index,layero){
					layer.close(index);
				},
			});
		});

	});

}